﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Interfaces;
using Modelo;
using System.Data.SqlClient;
using Datos;
using Datos.Excepciones;
using System.Windows.Forms;
using Datos.FabricaDAO;
using Datos.InterfacesDAO;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace Presentador
{
    public class PresentadorConsultaUltimoReporte
    {
        private IConsultaUltimoReporte _consultaReporte;

        public PresentadorConsultaUltimoReporte(IConsultaUltimoReporte consultaReporte)
        {
            _consultaReporte = consultaReporte;
        }

        //<summary>
        // Método que llena la lista de la ubicacion de cámaras almacenada en la BD
        //</summary> 
        public void ListaUbicacion(IList<Ubicacion> ListaUbicacionCamara)
        {
            try
            {
                foreach (Ubicacion ubicacion in ListaUbicacionCamara)
                {
                    _consultaReporte.Ubicacion.Items.Add(new ListItem(ubicacion.NombreUbicacion, ubicacion.CodigoUbicacion));
                }
                _consultaReporte.Ubicacion.DataBind();
            }
            catch (ExcepcionReporteTrafico e)
            {
                MessageBox.Show(Presentador_Recursos.ErrorSistema + "\n" + Presentador_Recursos.DetallesError + "\n" + e.InnerException, Presentador_Recursos.Error,
                MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1,
                MessageBoxOptions.ServiceNotification);
            }
        }

        //<summary>
        // Método que imprime la lista de las ubicaciones de cámara registradas 
        //en la BD
        //</summary> 
        public void ImprimeListaUbicacion()
        {
            try
            {
                IDAO_Informacion daoReporte;
                daoReporte = FabricaDAO.DAOInformacion();

                IList<Ubicacion> ubicacionCamaras = daoReporte.ListaUbicacion();
                ListaUbicacion(ubicacionCamaras);
            }
            catch (ExcepcionConsultar e)
            {
                MessageBox.Show(Presentador_Recursos.ErrorConsulta + "\n" + Presentador_Recursos.DetallesError + "\n" + e.InnerException, Presentador_Recursos.Error,
                                MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1,
                                MessageBoxOptions.ServiceNotification);
            }
            catch (ExcepcionReporteTrafico e)
            {
                MessageBox.Show(Presentador_Recursos.ErrorSistema + "\n" + Presentador_Recursos.DetallesError + "\n" + e.InnerException, Presentador_Recursos.Error,
                MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1,
                MessageBoxOptions.ServiceNotification);
            }

        }

        //<summary>
        // Método que llena la lista de Sentido del Tráfico almacenado en la BD
        //</summary> 
        public void ListaSentido(IList<Sentido> ListaSentidoReporte)
        {
            try
            {
                _consultaReporte.Sentido.Items.Clear();

                foreach (Sentido sentido in ListaSentidoReporte)
                {
                    _consultaReporte.Sentido.Items.Add(new ListItem(sentido.TipoSentido, sentido.CodigoSentido));
                }
                _consultaReporte.Sentido.DataBind();
            }
            catch (ExcepcionReporteTrafico e)
            {
                MessageBox.Show(Presentador_Recursos.ErrorSistema + "\n" + Presentador_Recursos.DetallesError + "\n" + e.InnerException, Presentador_Recursos.Error,
                MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1,
                MessageBoxOptions.ServiceNotification);
            }
        }

        //<summary>
        // Método que imprime la lista de sentidos registrados en la BD
        //</summary> 
        public void ImprimeSentido()
        {
            try
            {
                string ubicacion = _consultaReporte.Ubicacion.SelectedValue.ToString();
                IDAO_Informacion daoReporte;
                daoReporte = FabricaDAO.DAOInformacion();

                IList<Sentido> sentido = daoReporte.ListaSentido(ubicacion);
                ListaSentido(sentido);
            }
            catch (ExcepcionConsultar e)
            {
                MessageBox.Show(Presentador_Recursos.ErrorConsulta + "\n" + Presentador_Recursos.DetallesError + "\n" + e.InnerException, Presentador_Recursos.Error,
                                MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1,
                                MessageBoxOptions.ServiceNotification);
            }
            catch (ExcepcionReporteTrafico e)
            {
                MessageBox.Show(Presentador_Recursos.ErrorSistema + "\n" + Presentador_Recursos.DetallesError + "\n" + e.InnerException, Presentador_Recursos.Error,
                MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1,
                MessageBoxOptions.ServiceNotification);
            }

        }

        //<summary>
        // Método que consulta la ruta de la imagen del tráfico
        //</summary> 
        public string ConsultaImagenReporte()
        {
            try
            {
                string ubicacion = _consultaReporte.Ubicacion.SelectedValue.ToString();
                string sentido = _consultaReporte.Sentido.SelectedValue.ToString();

                IDAO_Informacion daoReporte;
                daoReporte = FabricaDAO.DAOInformacion();

                string imagen = daoReporte.ConsultaImagenReporte(ubicacion, sentido);

                string srcImagen = Presentador_Recursos.RutaImagen + imagen + Presentador_Recursos.ExtensionImagen;

                return srcImagen;

            }
            catch (ExcepcionConsultar e)
            {
                MessageBox.Show(Presentador_Recursos.ErrorConsulta + "\n" + Presentador_Recursos.DetallesError + "\n" + e.InnerException, Presentador_Recursos.Error,
                                MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1,
                                MessageBoxOptions.ServiceNotification);
                return null;
            }
            catch (ExcepcionReporteTrafico e)
            {
                MessageBox.Show(Presentador_Recursos.ErrorSistema + "\n" + Presentador_Recursos.DetallesError + "\n" + e.InnerException, Presentador_Recursos.Error,
                MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1,
                MessageBoxOptions.ServiceNotification);

                return null;
            }

        }
    }
}
